package com.chenjt.jvm.first.ten_GC;

/**
 * 注释：
 * 证明：Java没使用引用计数算法
 * -XX:+PrintGCDetails
 *
 * @author chenjt
 * @date 2025/6/14 9:31
 */
public class RefCountGC {
    // 这个成员属性唯一的作用就是占用一点内存
    private byte[] bigSize = new byte[5 * 1024 * 1024];// 5MB

    Object reference = null;
    public static void main(String[] args) {
        RefCountGC obj1 = new RefCountGC();
        RefCountGC obj2 = new RefCountGC();

        obj1.reference = obj2;
        obj2.reference = obj1;

        obj1 = null;
        obj2 = null;
        // 显式地执行垃圾回收行为
        // 这里发生GC，obj1和obj2能否被回收？
        /**
         * 将这里注释和打开，观察内存占用大小
         *  执行GC之后内存占用大小变小了，说明对象已被回收，
         *  而上述代码对象之间是互相引用的，如果是用引用计数算法的话，
         *  这时候对象的计数器是4（没置为null之前），置为null之后是2，
         *  但是这里GC还是执行了，说明了Java没用引用计数算法
         */
//        System.gc();
    }

}
